package com.tbit.uqbike.webmanager.dao.capital;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.object.pojo.AdaPayLog;
import com.tbit.uqbike.object.pojo.UserAdapayLog;
import com.tbit.uqbike.object.pojo.vo.LedgerManagementVO;
import com.tbit.uqbike.object.pojo.vo.SubAccountLogOverviewVO;
import com.tbit.uqbike.object.pojo.vo.SubAccountLogVO;
import com.tbit.uqbike.object.pojo.vo.SubAccountUserRefundVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author yee_
 * @date 2023/11/21
 */
@DS(DataSource.CAPITAL)
public interface AdaPayCapitalDao {

    /**
     * 查询分账明细
     *
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param userNO      userNO
     * @param buyOrderNO  业务订单号
     * @return 。
     */
    List<SubAccountLogVO> querySubAccountLogPage(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO, @Param("buyOrderNO") String buyOrderNO, @Param("confirmId") String confirmId,@Param("type")String type);

    /**
     * 查询分账统计总览(按照分账账号统计)
     *
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param userNO      adaPay商户下的用户id
     * @return 。
     */
    List<SubAccountLogOverviewVO> querySubAccountLogOverviewPage(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO);

    /**
     * 总订单金额,总平台服务费,总可分账金额
     *
     * @param startTime 。
     * @param endTime 。
     * @param accountId 。
     * @param adAccountId 。
     * @param userNO  。
     * @return 。
     */
    SubAccountLogOverviewVO querySubAccountLogOverviewSum(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO);

    /**
     * 查询分账统计总览(按照分账账号统计) 一次查询  ,如果卡的话用上面两个分开查
     *
     * @param startTime 。
     * @param endTime 。
     * @param accountId 。
     * @param adAccountId 。
     * @param userNO 。
     * @return 。
     */
    List<SubAccountLogOverviewVO> querySubAccountLogOverviewPageOnce(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO);

    /**
     * 查询分账统计总览(按照分账账号和按日统计)
     *
     * @param startTime 。
     * @param endTime 。
     * @param accountId 。
     * @param adAccountId 。
     * @param userNO 。
     * @return 。
     */
    List<SubAccountLogOverviewVO> querySubAccountLogOverviewPageOnceByDay(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO);


    /**
     * 查询退款明细
     *
     * @param startTime 。
     * @param endTime 。
     * @param accountId 。
     * @param adAccountId 。
     * @param userNO 。
     * @return 。
     */
    List<SubAccountUserRefundVO> querySubAccountUserRefund(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("accountId") Integer accountId, @Param("adAccountId") Integer adAccountId, @Param("userNO") String userNO, @Param("buyOrderNO") String buyOrderNO,@Param("confirmId") String confirmId,@Param("type") String type);

    /**
     * 获取分账信息列表
     *
     * @param userAdapayLog 用户adapay日志
     * @return {@link List}<{@link UserAdapayLog}>
     */
    List<UserAdapayLog> getInfoByMemberId(UserAdapayLog userAdapayLog);

    /**
     * 根据订单号确认已分账id
     *
     * @param paymentId 支付id
     * @return {@link String}
     */
    String getConfirmId(String paymentId);

    /**
     * 根据订单号获取汇付天下分账订单
     */
    AdaPayLog selectAdapaylogInfo(@Param("orderNO") String orderNO);

    /**
     * 根据订单号修改成功退款的汇付天下分账订单状态
     */
    Integer upAdaPayLogRefund(AdaPayLog adaPayLog);

    /**
     * 汇付运营收入
     *
     * @return .
     */
    List<Map<String, Object>> queryRideHuifuRefund(@Param("brandId") Integer brandId, @Param("accountId") List<Integer> accountId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("type") Integer type);

    List<LedgerManagementVO> getLedgerManagementList(@Param("previousDate") String previousDate);

}
